package com.itheima.capsulation;

public class Test {
    public static void main(String[] args) {
        //1.构造器
        System.out.println("=========构造器=========");
        constructorTest();
        //2.this关键词的应用
        System.out.println("=========this关键词的应用=========");
        thisTest();
        //3.封装
        System.out.println("========封装==========");
        capsulationTest();
        //4.实体类 一种特殊的类 ：用来保存数据的java类
        //  1.成员变量全部私有，且提供public修饰的get和set方法
        //  2.类需提供一个无参构造器，有参构造器可选
        System.out.println("========实体类==========");
        entityClass();
        //5.static关键字 静态变量 静态方法 存入堆内存中共享
        // 1.静态变量：所有对象共享，所有对象都可以直接访问。属于类，内存中只有一份，可以被所有类和实例对象共享
        // 2. 类名.静态变量  实例.静态变量（不推荐）
        // 3.无static修饰的成员变量 为实例变量，用实例访问
        // 4.应用场景: 某个数据只需要一份，且希望能够被访问修改，例如用户类来记录自己创建了多少个用户
        // 5.静态方法：用于修饰工具类函数 例如工具类，工具类中的方法不需要实例对象，直接通过类名调用即可
        // 6.实例方法中可以出现this ，静态方法中不可以出现this关键字
        System.out.println("========static应用==========");
        staticDemo();
        System.out.println(VerifyCodeUtil.getVerifyCode(4));
    }

    public static void constructorTest() {
        Student s1 = new Student();
        s1.name = "zs";
        s1.age = 20;
        s1.print();

        Student s2 = new Student("ls", 18);
        s2.print();
    }

    public static void thisTest() {
        Student s1 = new Student("zs", 20);
        System.out.println(s1);
        Student s2 = new Student("ls", 18);
        System.out.println(s2);
    }

    public static void capsulationTest() {
        // 目标：搞清楚封装的设计思想：合理隐藏合理暴露。
        //    学会如何隐藏如何暴露。 都不能直接访问
        // 1、如何隐藏：使用private关键字(私有，隐藏)修饰成员变量，就只能在本类中被直接访问，
        // 其他任何地方不能直接访问。

        // 2、如何暴露（合理暴露）：使用public修饰（公开）的get和set方法合理暴露
        // 成员变量的取值和赋值。
       Student s=new Student("zs",20);
      //  s.tel="123456789"; 不能够再直接赋值了
        s.setTel("123456789");
        System.out.println(s.getTel());

    }

    public static void entityClass() {
        Teacher teacher = new Teacher("ww",19);
        TeacherOperator operator = new TeacherOperator(teacher);
        operator.printInfo();

    }

  public static void  staticDemo() {
      new User();
      new User();
      new User();
      new User();
      System.out.println("共创建了"+User.count+"个用户");

  }
}
